package com.formation.DAO.implementations;

import java.awt.Window.Type;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;

import javax.sql.DataSource;

import com.formation.DAO.interfaces.IDAOStagiaire;
import com.formation.datasource.DataSourceAtod20;
import com.formation.entities.Stagiaire;

import java.sql.PreparedStatement;
import java.sql.Statement;


/**
 * The Class DAOStagiaireImpl.
 */
public class DAOStagiaireImpl implements IDAOStagiaire {

    /** The req ajout. */
    private final String reqAjout = "Insert into stagiaire (nom, prenom, date_naissance, adresse, id_organisme) values ( ?, ?, ?, ?, ?);";

    /** The req renvoi. */
    private final String reqRenvoi = "Update stagiaire set id_organisme = null where idstagiaire = ? and id_organisme = ?";

    /** The indice param nom. */
    private final Integer indiceParamNom = 1;

    /** The indice param prenom. */
    private final Integer indiceParamPrenom = 2;

    /** The indice param date naissance. */
    private final Integer indiceParamDateNaissance = 3;

    /** The indice param adresse. */
    private final Integer indiceParamAdresse = 4;

    /** The indice param organisme. */
    private final Integer indiceParamOrganisme = 5;

    /** The indice param nom. */
    private final Integer indiceParamRenvoiIdStagiaire = 1;

    /** The indice param prenom. */
    private final Integer indiceParamRenvoiIdOrganisme = 2;

    /*
     * (non-Javadoc)
     * @see
     * com.formation.DAO.interfaces.IDAOStagiaire#ajouter(com.formation.entities
     * .Stagiaire)
     */
    @Override
    public Stagiaire ajouter(Stagiaire paramStagiaire) {
        DataSource dataSource = new DataSourceAtod20();
        Connection cnx;
        try {
            cnx = dataSource.getConnection();

            PreparedStatement preparedStatement = cnx.prepareStatement(reqAjout, Statement.RETURN_GENERATED_KEYS);

            preparedStatement.setString(indiceParamNom, paramStagiaire.getNom());
            preparedStatement.setString(indiceParamPrenom, paramStagiaire.getNom());
            preparedStatement.setString(indiceParamAdresse, paramStagiaire.getNom());
            preparedStatement.setDate(indiceParamDateNaissance, new java.sql.Date(paramStagiaire.getDate().getTime()));

            if (paramStagiaire.getOrganisme() != null) {
                preparedStatement.setInt(indiceParamOrganisme, paramStagiaire.getOrganisme().getId());
            } else {
                preparedStatement.setNull(indiceParamOrganisme, Types.NULL);
            }

            if (preparedStatement.executeUpdate() == 1) {
                ResultSet rs = preparedStatement.getGeneratedKeys();
                if (rs.next()) {
                    paramStagiaire.setId(rs.getInt(1));
                }
            }

        } catch (SQLException e) {
            return paramStagiaire;
        }

        return paramStagiaire;
    }

    /*
     * (non-Javadoc)
     * @see com.formation.DAO.interfaces.IDAOStagiaire#rechercher(int)
     */
    @Override
    public List<Stagiaire> rechercher(int paramIdOrganisme) {
        // TODO Auto-generated method stub
        return null;
    }

    /*
     * (non-Javadoc)
     * @see
     * com.formation.DAO.interfaces.IDAOStagiaire#rechercher(java.lang.String)
     */
    @Override
    public List<Stagiaire> rechercher(String nomStagiaire) {
        // TODO Auto-generated method stub
        return null;
    }

    /*
     * (non-Javadoc)
     * @see
     * com.formation.DAO.interfaces.IDAOStagiaire#renvoi(com.formation.entities
     * .Stagiaire)
     */
    @Override
    public Stagiaire renvoi(Stagiaire paramStagiaire) {

        DataSource dataSource = new DataSourceAtod20();
        Connection cnx;
        try {
            cnx = dataSource.getConnection();

            PreparedStatement preparedStatement = cnx.prepareStatement(reqRenvoi);

            preparedStatement.setInt(indiceParamRenvoiIdStagiaire, paramStagiaire.getId());
            preparedStatement.setInt(indiceParamRenvoiIdOrganisme, paramStagiaire.getOrganisme().getId());

            if (preparedStatement.executeUpdate() == 1) {
                paramStagiaire.setOrganisme(null);
            }

        } catch (SQLException e) {
            return paramStagiaire;
        }

        return paramStagiaire;
    }

}
